package com.ktjiaoyu.utils;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;
@Data
public class Page <T>{
    //当前页码
    private Integer pageNo=1;
    //每页显示的记录数
    private  Integer pageSize = 5;
    //总数据量
    private Integer totalCount=null;
    //总页数
    private Integer totalPageCount=1;
    //分页数据集合,使用泛型兼容任意类型
    private List<T> data;

    public void setPageNo(Integer pageNo) {
        if (pageNo<=0){
            this.pageNo = 1;
        }
        if (totalPageCount!=null){
            //计算过总页数后 页码的设置要参考总页数
            if (totalPageCount>=1 && pageNo>totalPageCount){
                pageNo=totalPageCount;
            }
        }
        this.pageNo = pageNo;
    }
    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
        this.totalPageCount=this.totalCount%this.pageSize==0?
                            this.totalCount/this.pageSize:
                            this.totalCount/this.pageSize+1;
    }
    public int offset(){
        return (pageNo-1)*pageSize;
    }
    //是否第一页
    public boolean isFirst(){
        return pageNo==1;
    }
    //是否最后一页
    public boolean isLast(){
        return pageNo==totalPageCount;
    }
    //是否有下一页
    public boolean hasNext(){
        return pageNo<totalPageCount;
    }
    //是否有上一页
    public boolean hasPrevious(){
        return pageNo>1;
    }
    //页面上显示指定长度的页码
    public List<Integer> getShowPageNos(int showCount){
        List<Integer> list= new ArrayList<Integer>();
        //先加中间页码
        list.add(pageNo);
        //每一次页面计算的步长
        int step=1;
        while (list.size()<showCount){
            boolean added=false;
            int left=pageNo-step;//左边减页码
            int right=pageNo+step; //右边加页码
            if (left>=1){
                list.add(0,left);
                added=true;
            }
            if (right<=totalPageCount){
                list.add(right);
                added=true;
            }
            if (!added){
                break;
            }
            step++;
        }
        return list;
    }
}